          SUBROUTINE (MODE,INIT.VIEW,INIT.OID,INIT.GEN,V.ONLY)
** Version# 125 - 04/28/2009 - 10:40am - EJO - main

*** Subroutine - AOE
*-------------------------------------------------------------------------*
*** This routine is the main routine for manual Inventory Adjustment
*** Entry.  Based on date and branch, a user can adjust inventory levels
*** and locations in the amount of the quantity specified.
*-------------------------------------------------------------------------*
*** MODE - Mode of the order                                          IN
*** INIT.VIEW - Initial view                                         [IN]
*** INIT.OID - Initial Order ID                                      [IN]
*** INIT.GEN - Initial GEN                                           [IN]
*** V.ONLY - VIEW.ONLY                                               [IN]
*-------------------------------------------------------------------------*
*** Common: This routine sets OID.DATA$.
*-------------------------------------------------------------------------*
          DIM SV.PRD.BR(70)

          CHECK.KEY 'INVADJ.ALLOWED',ENTRY.OK,LEVEL
          CHECK.KEY 'COGS.VIEW',COGS.VIEW.OK

          READ GL.AUTO   FROM CTRLFILE,'GL.AUTO'        ELSE GL.AUTO   = ''
          READ DFLT.VIEW FROM CTRLFILE,'AOE.DFLT.VIEW'  ELSE DFLT.VIEW = ''
          READ ZCOST.OK  FROM CTRLFILE,'AOE.ZAVG.COST'  ELSE ZCOST.OK  = ''
          READ REQ.LOG   FROM CTRLFILE,'AOE.REQ.LOG'    ELSE REQ.LOG   = ''

          * Bellow control records are used to determine if header
          * comments are validated and if so the second control record
          * contains the relative data tied to that comment.
          READ VALDT FROM CTRLFILE,'VALIDATE.ADJ.COMMENT' ELSE VALDT = ''

          REQ.LOG = REQ.LOG[1,1]
          IF REQ.LOG = 'N' THEN REQ.LOG = ''

          VALID.LTYPS = 'D:,S - Stock,F - DeFective,O - Over Shipment,R - Review,L - DispLay'

          IF NOT(ENTRY.OK) THEN RETURN

          IF MODE#'A' THEN PRINT BELL:; RETURN

          LDID.LIST = ''
          QSIGN     = 1
          WINDOW 1,1,80,23,9
          OE.CHECK.GL MODE,ABORT
          IF ABORT THEN GOTO FINISH
          MAT CUS   = ''
          MAT CUSS  = ''
          NEW.ORDER = NO
          OVERRIDE  = NO

START:    IF LEVEL < 2 THEN VIEW.ONLY = YES ELSE VIEW.ONLY = V.ONLY
          DISPLAY.SCREEN 'AOE'
          VSCROLL.DEFINE 1,1,5,78,15,'AOE'
          VSCROLL.SET    1
          OID.DATA$ = ''
          GOSUB INIT.START

          IF INIT.OID#'' THEN
             OID = INIT.OID
             GEN = INIT.GEN
             GOTO RECALL.OID
          END ELSE
             OID = ''
INDATE:      INP GL.DT,9,1,10,"D4/"
             IF QUIT THEN IF OID='' THEN GOTO FINISH ELSE GOTO EXIT.LNS
             IF MOVE = 3 AND OID='' THEN
IN.OID:         INP ID,28,1,14,'MCU'
                IF QUIT THEN GOTO FINISH
                IF MOVE = 1 THEN
                   ID  = ''
                   OID = ''
                   PRINT @(28,1):OID OID.FMT
                   GOTO INDATE
                END
                IF ID='' THEN GOTO IN.OID
                OID = FIELD(ID,'.',1)
                IF NUM(OID) THEN
                   * The lines below for the length must stay.
                   * Pick doesn't handle types correctly for
                   * including them all together
                   * like  'A':"R%":(OID.LGTH$-1)
                   OLGTH = 'R%':OID.LGTH$-1
                   OID   = OID OLGTH
                   OID   = 'A':OID
                END

                IF OID[1,1]#'A' THEN PRINT BELL:; GOTO IN.OID
                READV TST FROM LEDFILE,OID,1 ELSE PRINT BELL:; GOTO IN.OID
                GOTO RECALL.OID
             END
             IF GL.DT = '' THEN GOTO INDATE
             IF NOT(VIEW.ONLY) THEN
                CHK.GL.POST GL.DT,OK,'A'
                IF NOT(OK) THEN
                   MESS 10,10,BELL:'This Date is in a closed Accounting Period - Please Re-enter'
                   GOTO INDATE
                END
             END
          END
          IF OID#'' THEN
             OE.CHANGE.SHIPDATE OID,GEN,GL.DT,QSIGN,LOG.MV,,ERR.MSG
             IF ERR.MSG THEN
                MESS 10,10,BELL:ERR.MSG
                PRINT @(9,1):OCONV(LED(23)<1,GEN>,'D4/') "L#10"
                GOTO INDATE
             END
          END ELSE
             JLI.SELECT MESS,GL.DT,GL.DT,SECURITY<9>,10
             READLIST IDS ELSE IDS = ''
             IF NOT (VIEW.ONLY) THEN
                IF IDS # '' THEN
                   IDS = "New":VM:LOWER(IDS)
                END ELSE
                   IDS = 'New'
                END
             END ELSE
                IDS = LOWER(IDS)
             END
             IF IDS = '' THEN
                MESS 10,4,BELL:'There are no open adjustments for the date entered.'
                GOTO START
             END
INID:        MENU.TABLE ID,5,2,1,10,70,'CALL AOE.CONV.SEL',1,IDS
             IF ID='' THEN GOTO START
             BEGIN CASE
             CASE OCONV(ID,'MCU') = 'NEW'
                AOE.CREATE.NEW.LED OID,'',GL.DT,GL.AUTO.INVADJ
                NEW.ORDER  = YES
                LOCKED.LED = YES
                LDID.LIST  = ''
                GEN        = 1
                PRINT @(28,1):OID OID.FMT:'.':LED(8)<1,GEN>"R%3"
                PRINT @(68,1):LED(73)<1,GEN> "L#10"
             CASE OTHERWISE
                OID  = FIELD(ID,'.',1)
                INVN = FIELD(ID,'.',2)+0
                READV INVNS FROM LEDFILE,OID,8 ELSE INVNS=''
                LOCATE INVN IN INVNS<1> SETTING GEN ELSE PRINT BELL:; GOTO INID
RECALL.OID:     NEW.ORDER = NO
                IF LEVEL = 2 THEN VIEW.ONLY = YES
                GOSUB RECALLIT
                IF ABORT THEN OID=''; ID = ''; GOTO INDATE
                IF LED(6)<1,1> = 'X' THEN VIEW.ONLY = YES
                GOSUB DISPLAY
             END CASE
          END

          OE.GET.KEYS OID,GEN,NEW.ORDER,VIEW.ONLY,PRC.KEY,QTY.KEY
          CHG.BR.OK = (LED(48)<1,GEN>='' AND NEW.ORDER)
          GOSUB LOAD.MENU

          IF VIEW.ONLY THEN GOTO INBODY
          IF NOT(CHG.BR.OK) THEN GOTO INBODY

IN.BR:    GL.BR = ''
IN.BR1:   INP.BR 51,1,4,GL.BR
          IF GL.BR#LED(2)<1,GEN,3> THEN
             LED(2)<1,GEN,1> = GL.BR
             LED(2)<1,GEN,2> = GL.BR
             LED(2)<1,GEN,3> = GL.BR
             IF LDID.LIST#'' THEN
                OE.UPD.ALL.LDIDS OID,GEN,QSIGN,LOG.MV
             END
          END
          IF QUIT THEN GOTO EXIT.LNS
          IF LED(2)<1,GEN,3>='' THEN PRINT BELL:; GOTO IN.BR
IN.MSG:   SV.COMM = LED(80)
          IF NOT(VALDT) THEN
IN$$7:       INP LED(80),1,3,78
          END ELSE
IN$$8:       INP LED(80),1,3,70,V_'C:VALID.ADJ.COMMENTS'
             IF TRIM(LED(80)) = '' THEN
                MESS 2,6,BELL:'Enter a Valid Header Comment'
                GOTO IN.MSG
             END

             AOE.HEADER.COMMENT.SET OID,GEN,LOG.MV

             * Update change log
             IF SV.COMM # LED(80) AND SV.COMM # "" THEN
                COMM.MSG = '** Changed the comment from ':SV.COMM
                COMM.MSG := ' to ':LED(80):'.'
                OE.ADD.COMMENT OID,,COMM.MSG
             END
          END
          IF QUIT THEN GOTO EXIT.LNS
          ON MOVE+1 GOTO IN.MSG,IN.MSG,INDATE,IN.MSG
*-------------------------------------------------------------------------*
INBODY:   COL = 1;   MOVE = 0;   LASTKEY = 0;   LAST.LINE = 0;   LDID = ''
          LINE = 1;  QUIT = NO;  INBOD   = YES; SUP.SER = NO
*-------------------------------------------------------------------------*
MOVENEXT: IF F12 THEN GOTO EXIT.LNS
          IF QUIT THEN
             GOSUB CHK.SNUM
             GOTO EXIT.LNS
          END
          IF VIEW.ONLY THEN
             DOWNOK = LDID.LIST<1,LINE+1>#''
          END ELSE
             DOWNOK = LDID.LIST<1,LINE>#''
          END
          LINES = DCOUNT(LDID.LIST,VM)
          IF NUM(PN) AND NOT(VIEW.ONLY) THEN CLS = COLS ELSE CLS = 1
          BEGIN CASE
          CASE LASTKEY = 12
             DLINE -= 15; IF DLINE < 1   THEN DLINE = 1
             LINE   = DLINE.XREF<1,DLINE>
             IF LINE+0 = 0 THEN LINE = 1
          CASE LASTKEY = 14
             TST    = DCOUNT(DLINE.XREF,VM); DLINE += 15
             IF DLINE > TST THEN DLINE = TST+1; LINE = LINES+1 ELSE
                LINE = DLINE.XREF<1,DLINE>
             END
          CASE OTHERWISE
             PARSEMOVE COL,LINE,CLS,LINES,15,DOWNOK,DOWNOK,BORDERMOVE
          END CASE

          IF BORDERMOVE=2 AND NOT(VIEW.ONLY) THEN INBOD=NO; GOTO IN.MSG

          IF LAST.LINE # LINE THEN
             LAST.LINE = LINE
             GOSUB GET.LINE
          END

          IF COL#1 AND TRIM(QO.ALPHA)='' THEN PRINT BELL:; COL = 1
          ON COL GOTO IN.QO, IN.PN, IN.UNTCST, IN.RVW, IN.LOC
          PRINT BELL:
*-------------------------------------------------------------------------*
IN.QO:    IF VIEW.ONLY THEN QO.LEN = 0 ELSE QO.LEN = 12
INP.QO:   INPV QO.ALPHA,0,DLINE,QO.LEN
          IF CHANGED THEN
             OE.QTY.CHNG.OK OID, GEN, QTY.KEY, VIEW.ONLY, QTY.CHNG.OK
             IF NOT(QTY.CHNG.OK) THEN GOSUB DISP.LINE; GOTO IN.QO
             GOSUB PARSE.QO
             IF VALID.ITEM THEN
                GOSUB CHK.QO; IF ERR THEN PRINT BELL:; GOTO IN.QO
                CURR.QTY = QO + 0
                GOSUB CHK.LN
                IF NOT(LOC.OK) THEN GOSUB DISP.LINE; GOTO IN.QO
                IF QO#0 AND QO#QOPEN THEN GOSUB UPD.QO
             END
             IF QO=0 AND VALID.ITEM AND LD(4)+0=0 THEN
                MESS 5,3,BELL:'Adjustment Quantity is Required'
                GOTO IN.QO
             END
          END
          IF NOT(QUIT) AND LASTKEY#12 AND MOVE#2 AND MOVE#3 AND QO.ALPHA='' AND NOT(VIEW.ONLY) THEN
             PRINT BELL:; GOTO IN.QO
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.PN:    INPV DESC,13,DLINE,DLGTH
          IF NOT(CHANGED) AND (MOVE=1 OR MOVE=2) THEN GOTO MOVENEXT
          IF NOT(QUIT) AND (CHANGED OR PN='') THEN
             OE.QTY.CHNG.OK OID, GEN, QTY.KEY, VIEW.ONLY, QTY.CHNG.OK
             IF LD(1)#'' THEN
                CT = DCOUNT(LED(9),VM)
                FOR G=1 TO CT
                   SQTY = SUM(LD(5)<1,G>) + SUM(LD(6)<1,G>)
                   INVN = LED(8)<1,G>
                   IF G#GEN AND SQTY#0 AND INVN#'' THEN
                     MESS 5,3,BELL:'Item on Invoice # : ':OID:'.':INVN"R%3"
                     QTY.CHNG.OK = NO; EXIT
                   END
                NEXT G
                IF QTY.CHNG.OK THEN
                   QO = -QO; SV.QO = ''
                   GOSUB CHK.PILS
                   QO = -QO
                   QTY.CHNG.OK = PIL.OK<1>
                END
             END
             IF NOT(QTY.CHNG.OK) THEN GOSUB DISP.LINE; GOTO IN.PN
             PN    = DESC
             SAVE.MOVE = MOVE
             VERF.PRD.ID.STK 13,DLINE,DLGTH,PN,'NOPDW'
             MOVE = SAVE.MOVE
             IF PN = '' THEN GOTO IN.PN
             IF QTY.KEY < 2 THEN
                * Check for nonstock products
                READV PRD.STAT FROM PRDFILE,PN,3 ELSE PRD.STAT = ''
                IF PRD.STAT # 1 THEN
                   PN   = ''
                   DESC = ''
                   VPRINT 13,DLINE,DESC DFMT
                   GOTO IN.PN
                END
             END
             GOSUB GET.PN
             GOSUB CHK.LN
             IF ERR OR NOT(LOC.OK) THEN
                DESC = ''
                VPRINT 13,DLINE,DESC DFMT
                GOTO IN.PN
             END
             IF QO=0 AND VALID.ITEM THEN
                MESS 5,3,BELL:'Adjustment Quantity is Required'
                GOTO IN.QO
             END
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.UNTCST:IF VIEW<1,2> = 'COMM' THEN GOTO MOVENEXT
IN$$1:    INPV UNTCST,UNT.DPOS,DLINE,10,'R3'
          IF CHANGED THEN
             IF NOT(PRC.KEY) THEN GOSUB DISP.VIEW; GOTO IN.UNTCST
             IF UNTCST = '' THEN
                LD(9)<1,GEN> = ''
                OVERRIDE     = NO
                GOSUB PRC.ITEM
             END ELSE
                IQ.COGS = ICONV(ICONV(OCONV(UNTCST,'MR3'),'MR9')/PER,'MR0')
                OVERRIDE     = YES
                LD(9)<1,GEN> = LD(8)<1,GEN>
                LD(8)        = IQ.COGS
                LD(10)       = IQ.COGS
             END
             GOSUB UPD.LINE
             GOSUB DISP.VIEW
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.RVW:   INPV TYP,LTYP.DPOS,DLINE,1,V_VALID.LTYPS
          IF TYP = '' THEN
             LTYP = FIELD(LD(7)<1,GEN,1>,'~',1)
             VPRINT LTYP.DPOS,DLINE,LTYP "L#1"
             GOTO IN.RVW
          END
          IF CHANGED THEN
             LD(7)<1,GEN,1> = TYP:'~':LD(7)<1,GEN,1>[3,999]
             CURR.TYP = TYP
             GOSUB UPD.LINE
             GOSUB DISP.VIEW
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.LOC:   INPV LOCA,LOCA.DPOS,DLINE,12,'MCU'
          IF HELP THEN
             PRD.LOCATION.STK.GET LOCAS,PN,GL.BR
             IF LOCAS = '' THEN PRINT BELL:; GOTO IN.LOC
             MENU.TABLE LOCA,30,7,1,8,15,,,LOCAS
             IF LOCA = '' THEN GOTO IN.LOC
             VPRINT @(62,DLINE):LOCA "L#12"
             CHANGED = YES
          END
          IF CHANGED THEN
             CONVERT '.' TO '-' IN LOCA
             CURR.LOC = LOCA
             GOSUB CHK.LN
             IF NOT(LOC.OK) THEN GOTO IN.LOC

             OLD.TYP = TRIM(FIELD(LD(7)<1,GEN,1>,'~',1))
             IF OLD.TYP='' THEN OLD.TYP = 'S'
             LD(7)<1,GEN,1> = OLD.TYP:'~':LOCA
             GOSUB UPD.QOH
             GOSUB UPD.LINE
             GOSUB DISP.VIEW
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
EXIT.LNS: *** properly exit the order

          IF VIEW.ONLY THEN GOTO RESTART

          IF (F12 OR LED(48)='') AND NEW.ORDER THEN
             CLOSED.OK = YES

             * Delete both the ledger and AR records
             OE.DEL.ORDER OID,QSIGN,,CLOSED.OK

             IF QUIT THEN
                QUIT = 0
                MOVE = 0
                LASTKEY = 0
                IF LED(2)<1,1,1> = '' AND CHG.BR.OK THEN
                   GOTO IN.BR
                END ELSE
                   IF VALDT AND TRIM(LED(80)) = '' THEN
                      GOTO IN.MSG
                   END ELSE
                      GOTO INBODY
                   END
                END
             END ELSE
                DELETE ARFILE,OID:'.001'
             END

             GOTO RESTART
          END

          IF F12 THEN
             IF LOG.MV = '' THEN
                GOTO RESTART
             END ELSE
                MESS 10,2,BELL:'Changes have been made - Cannot Abort'
                QUIT = 0; MOVE = 0; LASTKEY = 0; F12 = NO; GOTO MOVENEXT
             END
          END

          IF LED(2)<1,1,1>='' THEN PRINT BELL:; GOTO IN.BR
          OE.DEL.NULL.LINES OID,GEN,LDID.LIST,REDISP
          IF REDISP THEN GOSUB DISP.LINES

          UPDATE.LEDGER    OID

          * Delete all GENs with no items
          OE.DEL.NULL.GENS OID,GEN

          * Update Log Comments
          GOSUB UPD.LOG

          * Make sure UET's actually enabled for this branch.
          UET.ENABLED = NO
          IF UET.ENABLED$ THEN
             READV UET.ENABLED FROM CTRBFILE,'UET.ENABLED~':LED(2)<1,GEN,2>,1 ELSE UET.ENABLED = NO
          END

          IF UET.ENABLED THEN
             OID.DATA$ = ''
             OID.DATA$<1> = OID
             OID.DATA$<2> = GEN
             OID.DATA$<4> = LED(5)<1,GEN>
             UET.AOE.CHECK.ORDER OID,GEN
          END

          GOTO RESTART
*-------------------------------------------------------------------------*
RESTART:  *** restart
          IF LOCKED.LED THEN
             OE.UNLOCK.LED OID
          END
          VIEW.ONLY = NO
          IF INIT.OID#'' OR TCL.LEVEL > 0 THEN GOTO FINISH

          GOTO START
*-------------------------------------------------------------------------*
INIT.START: *** initialize variables

          MENU.CLEAR
          MAT LED    = ''
          QO.ALPHA   = ''
          GEN        = 1
          LINE       = 1
          DLINE      = 1
          DLINE.XREF = 1
          LOG.MV     = ''
          OLOG.MV    = ''
          COLS       = 5
          VALID.ITEM = NO
          INBOD      = NO
          LOCKED.LED = NO
          QSIGN      = OE.GET.QSIGN(MODE)
          OID.FMT    = 'L#':OID.LGTH$

          CURR.LOC = ''
          CURR.TYP = ''
          CURR.PN  = ''
          CURR.QTY = ''
          INI.DATA = ''

          * Setup default views
          VIEW = ''
          IF COGS.VIEW.OK THEN
             VIEW<1,2> = 'COGS'     ;* Cost COGS view
          END ELSE
             VIEW<1,2> = 'COMM'     ;* Cost COMM view
          END
          IF DFLT.VIEW[1,1] = 'E' THEN
             VIEW<1,1> = 2          ;* Extended view
             GOSUB DSP.EXT          ;* Display extended
          END ELSE
             VIEW<1,1> = 1          ;* Standard view
             GOSUB DSP.STD          ;* Display standard
             INIT.VOPT = NO
          END

          RETURN
*-------------------------------------------------------------------------*
GET.LINE: *** get data for one line

          LDID = LDID.LIST<1,LINE>
          IF LDID#'' THEN
             LD.GET LDID
          END ELSE
             MAT LD = ''
          END
          MAT OLD.LD = MAT LD
          PN = LD(1)
          IF NUM(PN) AND PN#'' THEN
             OE.CALC.QOPEN OID,QSIGN,QOPEN,GEN
             QO = QOPEN
             QS = (SUM(LD(5)<1,GEN>)+SUM(LD(6)<1,GEN>)) * QSIGN
             GET.ALL.PRD GL.BR,PN,QSIGN,GROUP
             PRICE.PER.GET PER,,,,GL.DT
             VALID.ITEM = YES
             IF PRD(15) # '' THEN UM.TBL = PRD(15) ELSE UM.TBL = PLNE(3)
             IQ.TO.ALPHA UM.TBL,PRD(7),LD(23),QO,Q1,U1,Q2,U2,QO.ALPHA
             GOSUB CHK.SNUM
          END ELSE
             QO=''; QO.ALPHA=''; U1=''; Q1=''; U2=''; Q2=''
             QS=''; QOPEN='';    COL=1; MAT PRD='';   VALID.ITEM =NO
          END
          LOCATE LINE IN DLINE.XREF<1> SETTING DLINE ELSE NULL
          VSCROLL.GET.VER DLINE,VER
          OID.DATA$<3> = LDID
          OID.DATA$<5> = PN

          CURR.PN  = PN
          CURR.QTY = QO
          ORG.QTY  = QO
          CURR.LOC = FIELD(LD(7)<1,GEN,1>,'~',2)
          CURR.TYP = FIELD(LD(7)<1,GEN,1>,'~',1)

          RETURN
*-------------------------------------------------------------------------*
CHK.SNUM: *** Check this line for the serial number.

          SERL = PRD.BR(25)
          IF NOT(VALID.ITEM) OR LDID='' OR LDID+0<0 OR SUP.SER THEN RETURN
          OE.SERIAL.CHECK OID,GEN,LDID,SERL,YES,VIEW.ONLY

          RETURN
*-------------------------------------------------------------------------*
UPD.QOH:  *** Update the QOH for this location

          PRDD.BR.GET GL.BR,PN
          LOC = LD(7)<1,GEN,1>[3,99]
          LOC = FIELD(LOC,'|',1)
          GET.ONHAND.LOC PRDD.BR(1),PRDD.BR(8),LOC,QOH
          LD(97)<1,GEN,1> = QOH

          RETURN
*-------------------------------------------------------------------------*
UPD.LINE: *** update this line

          IF NOT(VIEW.ONLY) THEN
             OE.UPDATE.LDID LDID,OID,GEN,LOG.MV,QSIGN,LDID.LIST
          END

          RETURN
*-------------------------------------------------------------------------*
PRC.ITEM: *** price this line

          IF QO > 0 THEN ADJ.CLS = 'ADJ+' ELSE ADJ.CLS = 'ADJ-'

          * Make sure that the list of branches this price class is
          * set for in the current CUSS array included the GL Branch.
          LOCATE GL.BR IN CUSS(157)<1> SETTING GL.BR.IX ELSE
             CUSS(157)<1,GL.BR.IX> = GL.BR
          END
          CUSS(13)     = ADJ.CLS
          LED(37)      = ADJ.CLS

          RECHK.MATRIX = YES
          IF OVERRIDE THEN
             RECHK.MATRIX = NO
          END

          AOE.PRICE.ITEM OID,GEN,LDID,PN,QO,QSIGN,ZCOST.OK

          RETURN
*-------------------------------------------------------------------------*
PARSE.QO: *** get the correct qty/uom for this line

          IF NUM(PN) THEN
             PARSE.QTY QO.ALPHA,Q1,U1,Q2,U2
             QO.ALPHA = Q1"R#5":U1"L#2":Q2"R#3":U2"L#2"
             IF Q1<99999 AND Q1>-9999 THEN
                QO.ALPHA = Q1"R#5":U1"L#2":Q2"R#3":U2"L#2"
             END ELSE
                QO.ALPHA = Q1:U1:' ':Q2:U2
             END
          END ELSE QO.ALPHA = '*'"R#12"
          VPRINT 0,DLINE,QO.ALPHA"L#12"

          RETURN
*-------------------------------------------------------------------------*
CHK.QO:   *** check qty ordered

          SV.QO = QO
          IF PRD(15) = '' THEN UM.TBL = PLNE(3) ELSE UM.TBL = PRD(15)
          VALIDATE.SELL.UM MODE,UM.TBL,PRD(7),Q1,U1,Q2,U2,1,VER,QO

          * Check the maximum days supply
          GOSUB CHK.PILS
          IF NOT(PIL.OK<1>) THEN
             QO = SV.QO
             OE.DISP.QO DLINE,LD(1),QO,LD(23)
             RETURN
          END

          QO = QO + 0
          LD(23) = U1
          READ ORD.UOM FROM CTRLFILE,'OE.USE.ORDER.UOM' ELSE ORD.UOM=''
          IF ORD.UOM THEN
             LD(85) = U1
          END

          OE.DISP.QO DLINE,LD(1),QO,LD(23)

          RETURN
*-------------------------------------------------------------------------*
UPD.QO:   *** update qty ordered

          QO.DIFF = QO - QOPEN
          IF QO.DIFF<0 THEN
             OE.CHECK.FOR.TAG OID,GEN,QO.DIFF,CHNG.OK,LDID
             IF NOT(CHNG.OK) THEN GOSUB DISP.LINE; RETURN
          END
          LD(4) = LD(4) + QO.DIFF*QSIGN
          QOPEN = QO
          IF LD(7)<1,GEN,1> = '' THEN
             PRD.LOCATION.GET LOCA,LD(1),GL.BR
             LD(7)<1,GEN,1> = 'S~':LOCA
          END
          IF INDEX(STK.TYPES.AVL$,LD(7)<1,GEN,1>[1,1],1) THEN
             LD(5)<1,GEN,1> = LD(4)
          END ELSE
             LD(6)<1,GEN,1> = LD(4)
          END
          GOSUB UPD.QOH
          GOSUB PRC.ITEM
          GOSUB UPD.LINE
          GOSUB DISP.LINE

          RETURN
*-------------------------------------------------------------------------*
CHK.LN:   *** Check the entire line to make sure the quantity of that part
          *** number will fit in the location selected.

          LOC.OK = YES
          IF CURR.LOC#'' AND CURR.PN#'' THEN
             * Find the original quantity for this location and part number
             * If the user has changed what's on the screen & then changes
             * the location, we won't know by how much it's increased or
             * decreased unless we do a read.
             ORG.QTY = 0

             * Loop through ini data to see what value was originally
             ORG.CT = DCOUNT(INI.DATA<1>,VM)
             CURR.ROW = CURR.LOC:'~':CURR.TYP
             FOR ORG.II = 1 TO ORG.CT
                LOCATE CURR.ROW IN INI.DATA<5> SETTING POS THEN
                   ORG.QTY = INI.DATA<2,POS>
                   EXIT
                END
             NEXT ORG.II
             CHK.QTY = CURR.QTY - ORG.QTY

             PRD.LOCATION.DB.CHECK CURR.LOC,GL.BR,CURR.PN,CHK.QTY,NO,LOC.OK,ERR.MSG
             IF NOT(LOC.OK) THEN
                FMT.RF.ERR.MSG ERR.MSG,30
                PRINT BELL:
                GOSUB DISP.VIEW
             END
          END

          RETURN
*-------------------------------------------------------------------------*
GET.PN:   *** get product data

          ERR.MSGS = ''
          OE.GET.PN.FULL OID,GEN,GL.BR,PN,LDID,QSIGN,GROUP,ABORTED
          IF ERR OR ABORTED THEN
             PN   = ''
             DESC = ''
             VPRINT 13,DLINE,DESC DFMT
             RETURN TO IN.PN
          END
          PRICE.PER.GET PER,,,,GL.DT
          IF ERR THEN
             IF VALID.ITEM THEN GOSUB DISP.LINE
             RETURN
          END
          VALID.ITEM = YES
          IF LDID='' THEN
             OE.NEW.LDID OID,LDID,LDID.LIST,LINE
          END

          * We need to save off PRD.BR because when we check the PIL in
          * CHK.QO, it will get wiped out.
          MAT SV.PRD.BR = MAT PRD.BR
          GOSUB CHK.QO
          MAT PRD.BR    = MAT SV.PRD.BR

          * add an attached comment on this adjuster if not the writer
          IF USER.ID # LED(73)<1,GEN> THEN
             UCMT  = '* ':USER.ID"L#8":' - ':OCONV(DATE(),'D4/'):' - '
             UCMT := OCONV(TIME(),'MTH'):' ':TIME.ZONE$:' *'
             LD(3)<1,-1> = TRIM(UCMT)
          END

          IF PRD.BR(11) = 'L' OR PRD.BR(11) = 'D' THEN
             LD(7)          = 'S~'
             LD(5)<1,GEN,1> = QO

             * Allow user to assign regular lots.
             OE.SPLT.LOC.CHK OID,GEN
             IF PRD.BR(11) = 'D' THEN
                IF NOT(CHANGED) THEN
                   ERR          = YES
                   LOCA         = ''
                   LD(7)<1,GEN> = ''
                   LD(5)<1,GEN> = ''
                   RETURN
                END
             END

             GOSUB UPD.LINE
             GOSUB DISP.VIEW
          END

          LDID.LIST<1,LINE> = LDID
          IF QO#0 THEN GOSUB UPD.QO
          OID.DATA$<3> = LDID
          OID.DATA$<5> = PN

          CURR.PN = PN

          RETURN
*-------------------------------------------------------------------------*
DISPLAY:  *** display info to screen

          IF VIEW.ONLY THEN PRINT @(2,0):BLINK$:'View Only':NORM$

          PRINT @(9,1):OCONV(LED(23)<1,GEN>,'D4/')           "L#10"
          PRINT @(28,1):OID OID.FMT:'.':LED(8)<1,GEN>        "R%3"
          PRINT @(51,1):LED(2)<1,GEN,1>                      "L#4"
          PRINT @(68,1):LED(73)<1,GEN>                       "L#10"
          PRINT @(1,3):LED(80)<1,GEN,1>                      "L#78"

          * Displays image indicator if images exist.
          CHECK.FOR.IMAGES OID:'.':LED(8)<1,GEN>"R%3", 'L', IMAGE.FLAG
          IF IMAGE.FLAG THEN
             PRINT @(75,0):BLINK$:'*i*':NORM$
          END
          *--                                           --*

          GOSUB DISP.LINES

          IF LED(6)<1,1> = 'X' THEN
             ERR.MESS 10,10,BELL:'This Adjustment has been canceled !!!'
          END

          RETURN
*-------------------------------------------------------------------------*
DISP.LINES: *** display line items

          SUP.SER = YES
          OE.DISP.LINES VIEW,OID,GEN,LDID.LIST,DLINE.XREF,QSIGN,DFMT,13
          GOSUB GET.LINE
          SUP.SER = NO

          RETURN
*-------------------------------------------------------------------------*
DISP.LINE: *** display one line

          DLN = DLINE
          OE.DISP.LINE VIEW,OID,GEN,LDID.LIST,DLINE.XREF,LINE,DLN,QOPEN,DFMT,13
          RETURN
*-------------------------------------------------------------------------*
DISP.VIEW: *** display line item info based on view

          OE.DISP.VIEW OID,GEN,LDID.LIST,DLINE.XREF,DLINE,LINE,VIEW

          RETURN
*-------------------------------------------------------------------------*
RECALLIT: *** recall OID data

          OE.RECALLIT.FULL OID,GEN,VIEW.ONLY,LOCKED.LED,LDID.LIST,ABORT
          GL.BR = LED(2)<1,GEN,3>
          GL.DT = LED(22)<1,GEN>
          OID.DATA$<1> = OID
          OID.DATA$<2> = GEN

          LN.CT = 1
          LOOP UNTIL LDID.LIST<1,LN.CT> = ''
             SUP.SER = YES
             LINE = LN.CT
             GOSUB GET.LINE
             SUP.SER = NO
             INI.DATA<1,LN.CT> = CURR.PN
             INI.DATA<2,LN.CT> = CURR.QTY
             INI.DATA<3,LN.CT> = CURR.LOC
             INI.DATA<4,LN.CT> = CURR.TYP
             INI.DATA<5,LN.CT> = CURR.LOC:'~':CURR.TYP
             LN.CT += 1
          REPEAT

          RETURN
*-------------------------------------------------------------------------*
CHK.PILS: *** check to make sure they're not exceeding the max days supply

          IF NOT(NUM(LD(1))) THEN PIL.OK = YES; RETURN

          * Set up the days supply we are creating.
          IF SV.QO+0 = 0 THEN QTY = QO*QSIGN ELSE QTY = (SV.QO-QO)*-QSIGN
          OE.CHK.PIL OID,GEN,LED(2)<1,GEN,2>,LD(1),QTY,PIL.OK,ADDL.INFO

          RETURN
*-------------------------------------------------------------------------*
SUBS:     ON OPTION GOTO INS.LINE, DEL.LINE, COMMENT, FUT.LDGR, HIST.LDGR, PRD.MAINT,TOTALS, CANCEL, CHANGES, GL.ACCT, VIEW.GL, FIND.PN, SER.ENTRY, CHG.COL.VIEW, CHG.COST.VIEW
*-------------------------------------------------------------------------*
INS.LINE: *** insert one line

          IF LINE>DCOUNT(LDID.LIST,VM) OR VIEW.ONLY OR NOT(INBOD) THEN PRINT BELL:; RETURN
          OE.INS.LINE LDID.LIST,LINE,DLINE.XREF,DLINE
          GOSUB GET.LINE

          RETURN
*-------------------------------------------------------------------------*
DEL.LINE: *** delete one line

          IF LINE>DCOUNT(LDID.LIST,VM) OR VIEW.ONLY OR NOT(INBOD) THEN PRINT BELL:; RETURN
          OE.QTY.CHNG.OK OID, GEN, QTY.KEY, VIEW.ONLY, QTY.CHNG.OK
          IF NOT(QTY.CHNG.OK) THEN PRINT BELL:; RETURN
          QO = -QO; SV.QO = ''
          GOSUB CHK.PILS
          QO = -QO
          IF NOT(PIL.OK<1>) THEN PRINT BELL:; RETURN
          OE.DEL.LINE OID,GEN,LDID,LDID.LIST,LINE,DLINE.XREF,DLINE,QSIGN,NEW.ORDER,OLOG.MV
          IF VALID.ITEM THEN GOSUB PRC.ITEM
          GOSUB UPD.LINE
          GOSUB GET.LINE
          IF VALID.ITEM THEN GOSUB DISP.VIEW

          RETURN
*-------------------------------------------------------------------------*
COMMENT:  *** add a comment line

          IF LD(1)='S' OR NOT(INBOD) THEN PRINT BELL:; RETURN
          VSCROLL.GET.VER LINE,VER
          OE.COMMENTS OID,GEN,LDID,VIEW.ONLY,40
          IF F12 OR (LD(3)='' AND LDID='') THEN RETURN
          IF LDID='' THEN
             PN    = 'C'
             LD(1) = PN
             OE.NEW.LDID OID,LDID,LDID.LIST,LINE
             LDID.LIST<1,LINE> = LDID
          END
          GOSUB UPD.LINE
          GOSUB DISP.LINE
          QUIT = 0; COL = 1; MOVE = 4

          RETURN TO MOVENEXT
*-------------------------------------------------------------------------*
FUT.LDGR: *** view the future ledger for this PN

          PN = LD(1)
          IF PN='' OR NOT(NUM(PN)) OR NOT(INBOD) THEN PRINT BELL:; RETURN
          PRODUCT.LEDGER GL.BR,PN

          RETURN
*-------------------------------------------------------------------------*
HIST.LDGR: *** view the history ledger for this PN

          PN = LD(1)
          IF PN='' OR NOT(NUM(PN)) OR NOT(INBOD) THEN PRINT BELL:; RETURN
          INV.HISTORY.LEDGER PN,DATE(),GL.BR

          RETURN
*-------------------------------------------------------------------------*
CHANGES:  *** view the order change log

          OE.VIEW.COMMENTS OID,GEN

          RETURN
*-------------------------------------------------------------------------*
VIEW:     *** change the current view

          OE.CHNG.VIEW OID,GEN,PRC.KEY,COLS,DLGTH,REDISP
          IF REDISP THEN DFMT = 'L#':DLGTH; GOSUB DISP.LINES
          COL = 1; LASTKEY = 0; MOVE = 0

          RETURN TO MOVENEXT
*-------------------------------------------------------------------------*
PRD.MAINT: *** view Product Maint for this PN

          LD.GET LDID
          PN = LD(1)

          * Protect the call through an execute layer to ensure we don't
          * mess up any common variables.
          EXEC.PGM 'PRODUCT.MAINT',PN

          RETURN
*-------------------------------------------------------------------------*
TOTALS:   *** view the totals screen

          AOE.TOTALS OID,GEN,LOG.MV,,VIEW.ONLY,VIEW<1,2>

          RETURN
*-------------------------------------------------------------------------*
CANCEL:   *** cancel the order

          IF VIEW.ONLY THEN PRINT BELL:; RETURN
          IF NEW.ORDER THEN
             MESS 10,2,BELL:'Use <F12> to Abort'
             RETURN
          END
          OE.CANCEL.ORDER OID,QSIGN
          IF QUIT THEN RETURN

          RETURN TO RESTART
*-------------------------------------------------------------------------*
GL.ACCT:  *** view G/L account info

          WINDOW 10,10,78,5,3
          IF VIEW.ONLY THEN PRINT @(5,0):BLINK$:'View Only':NORM$
          PRINT @(0,1):'G/L Account : ':OCONV(LED(62)<1,GEN,1>,'TGENLED;X;3;3')"L#60"
          GL.ID = LED(62)<1,GEN,1>
          IF LED(62)<1,GEN,2> = '' THEN LED(62)<1,GEN,2> = 'INVADJ'

          * Save Original SL.ID so we can use to search later
          OSL.ID  = LED(62)<1,GEN,2>

          * If SubLedger ID equals default INVADJ then temporarily set it
          * to blank for display to user.
          IF OSL.ID = 'INVADJ' THEN
             SL.ID = ''
          END ELSE
             SL.ID = OSL.ID
          END
          PRINT @(0,3):'SubLedger   : ':SL.ID              "L#10"

IN.GL:    *** Input for G/L Account
          IF VIEW.ONLY THEN
IN$$4:       INP A,14,1,0
             GL.ID = ''
          END ELSE
IN$$3:       INP GL.ID,14,1,60,V_'S:VERF.GL,INVA~':GL.BR
          END
          IF F12 THEN GL.ID = ''; F12 = NO; GOTO GL.EXIT

          IF GL.ID='' THEN GOTO GL.EXIT

          PRINT @(14,1):OCONV(GL.ID,'TGENLED;X;3;3')"L#60"

          * If GL Number changes blank out SubLedger
          IF GL.ID # LED(62)<1,GEN,1> THEN
             SL.ID = ''
             PRINT @(0,3):'SubLedger   : ':SL.ID              "L#10"
          END

          * See if SubLedgers are Allowed.
          READV SL.ALLOWED FROM GLFILE,GL.ID,31 ELSE SL.ALLOWED = 'N'
          IF SL.ALLOWED = '' THEN SL.ALLOWED = 'N'

          IF QUIT AND SL.ALLOWED # 'R' THEN GOTO GL.EXIT

          IF SL.ALLOWED # 'N' THEN
             ON MOVE+1 GOTO IN.GL,IN.GL,IN.GL,IN.GL,IN.SL,IN.SL
          END ELSE
             GOTO GL.EXIT
          END

          TEMP.SL.ID = SL.ID[2,999]

IN.SL:    *** Input for SubLedger Account
          GL.SUB.LEDGER.INP GL.ID, 14, 3:VM:YES, TEMP.SL.ID, VALS, ERRS
          IF F12 THEN GL.ID = ''; SL.ID = ''; F12 = NO; GOTO GL.EXIT

          * Handle the Errors
          IF ERRS THEN
             * ERRS is made up of two fields which are seperated by a ~
             * The first field is the Err Number the second is the msg.
             E.NUM = FIELD(ERRS,'~',1)
             E.MSG = FIELD(ERRS,'~',2)

             * If error Message then display it.
             IF E.MSG THEN
                ERR.MESS 1,0,BELL:E.MSG
             END

             BEGIN CASE
             CASE E.NUM = 1          ;* Error with G/L Number
                GOTO IN.GL
             CASE E.NUM = 4          ;* They hit F12 or Escape
                GOTO GL.EXIT
             CASE E.NUM = 6          ;* They hit a HotKey
                GOSUB SUBS
                GOTO IN.SL
             CASE OTHERWISE          ;* All Other Errors go back to input
                GOTO IN.SL
             END CASE
          END

          * VALS will hold any return values from the input routine.
          * This may be a single value or multiple values.
          IF VALS # '' THEN
             NUM.VALS = DCOUNT(VALS,AM)
             IF NUM.VALS > 1 THEN
                ERR.MESS 1,0,BELL:'Multiple SubLedgers Selected, Will Only Use One!'
             END
             IF VALS<1,1> # '' THEN
                SL.ID = '^':VALS<1,1>
             END ELSE
                SL.ID = ''
                TEMP.SL.ID = ''
             END
             PRINT @(14,3):SL.ID[2,999] "L#10"
          END ELSE
             * If No valid value returned then return to input.
             SL.ID = ''
             TEMP.SL.ID = ''
             PRINT @(14,3):'        ' "L#10"
             GOTO IN.SL
          END

          ON MOVE+1 GOTO IN.SL,IN.SL,IN.GL,IN.SL,IN.SL,IN.SL

GL.EXIT:  *** EXIT
          QUIT = NO
          WINDOW.CLOSE

          IF GL.ID = '' THEN RETURN

          * IF SL.ID = '' and we are posting to the autopost account
          * for inventory adjustments then make it reflect that.
          IF SL.ID = '' THEN
             IF GL.ID = GL.AUTO.INVADJ THEN SL.ID = 'INVADJ'
          END

          * Strip caret before storing SubLedger ID in LED(62)
          IF SL.ID[1,1] = '^' THEN
             LED(62)<1,GEN,2> = SL.ID[2,10]
          END ELSE
             LED(62)<1,GEN,2> = SL.ID
          END

          GL.CT = DCOUNT(LED(24)<1,GEN>, SVM)

          * With new GL Dynamic posting there can be multiple Inventory
          * Adjustment GL Postings so we need to loop throught them
          * all to change to the appropriate number.
          INVADJ.AMT = 0
          SV.NTS     = ''
          FOR IGL = GL.CT TO 1 STEP -1
             IF LED(24)<1,GEN,IGL> # 'INVTY' AND LED(24)<1,GEN,IGL> # 'CSGN.INVTY' THEN
                * If this is an adjustment posting total it and delete it
                * so we can add back one entry later.
                INVADJ.AMT += LED(26)<1,GEN,IGL>

                * Save any detail notations
                SV.NTS = LED(81)<1,GEN,IGL>
                LED(24) = DELETE(LED(24),1,GEN,IGL)
                LED(25) = DELETE(LED(25),1,GEN,IGL)
                LED(26) = DELETE(LED(26),1,GEN,IGL)
                LED(81) = DELETE(LED(81),1,GEN,IGL)
             END
          NEXT IGL

          AGL.ID = LED(2)<1,GEN,2>:'~':GL.ID

          * Change postings to the new posting.
          IF INVADJ.AMT # 0 THEN
             * Add one so we add a new entry.
             GL.CT = DCOUNT(LED(24)<1,GEN>, SVM) + 1
             LED(24)<1,GEN,GL.CT> = SL.ID
             LED(25)<1,GEN,GL.CT> = AGL.ID
             LED(26)<1,GEN,GL.CT> = INVADJ.AMT
             LED(81)<1,GEN,GL.CT> = SV.NTS
             POS = GL.CT
             GOSUB DET.NOTES
          END

          LED(62)<1,GEN,1> = GL.ID

          * Now we have to change all of the Ledger Detail postings as
          * well.
          FOR LDN = 1 TO LED(50)-1
             LD.GET LDN
             GL.CT = DCOUNT(LD(25)<1,GEN>, SVM)
             FOR IGL = GL.CT TO 1 STEP -1
                IF LD(33)<1,GEN,IGL> # 'INVTY' AND LD(33)<1,GEN,IGL> # 'CSGN.INVTY' THEN
                   LD(33)<1,GEN,IGL> = SL.ID
                   LD(25)<1,GEN,IGL> = AGL.ID
                END
             NEXT IGL
             LD.PUT LDN
          NEXT LDN

          UPDATE.LEDGER OID,GEN
          GOSUB GET.LINE

          RETURN
*-------------------------------------------------------------------------*
DET.NOTES: *** allows detail notes to be entered if they are entering
          *** a GL Distribution.

          NT = RAISE(RAISE(LED(81)<1,GEN,POS>))
          DETAIL.NOTATION NT,1,VIEW.ONLY
          LED(81)<1,GEN,POS> = LOWER(LOWER(NT))

          RETURN
*-------------------------------------------------------------------------*
VIEW.GL:  *** view GL postings info

          VIEW.GL OID,GEN

          RETURN
*-------------------------------------------------------------------------*
FIND.PN:  *** find a product on this order

          GOSUB GET.LINE
          IF NOT(INBOD) THEN
             COL = 1;   MOVE = 0;   LASTKEY = 0;  LAST.LINE = 0;  LDID = ''
             LINE = 1;  QUIT = NO;  INBOD   = YES
             LINES  = DCOUNT(LDID.LIST,VM)
          END
          FIND.PN = ''

IN$$5:    INP.PROMPT FIND.PN,'Enter product to find: ','TPRODUCT;X;1;1',30,'S:VERF.PRD.ID'
          LASTKEY = ''
          MOVE    = ''
          IF F12 THEN QUIT=NO; RETURN

          FOR J = 1 TO LINES
             LDID = LDID.LIST<1,J>
             IF LDID#'' THEN
                LD.GET LDID
             END ELSE MAT LD=''
             IF LD(1)=FIND.PN THEN
                LINE = J
                RETURN TO MOVENEXT
             END
          NEXT J

          * Didn't find anything, so restore LD to values before loop.
          MAT LD = MAT OLD.LD
          PRINT BELL:

          RETURN
*-------------------------------------------------------------------------*
SER.ENTRY: *** Enter serial numbers for this line item.

          SERL = PRD.BR(25)
          IQTY = SUM(LD(5)<1,GEN>)+SUM(LD(6)<1,GEN>)

          BEGIN CASE
          CASE SERL = 'I' OR SERL = 'A' OR SERL = 'D'
             OE.SERIAL.ENTRY OID,GEN,LDID,VIEW.ONLY
          CASE (SERL = 'O' OR SERL = 'R') AND IQTY < 0
             OE.SERIAL.ENTRY OID,GEN,LDID,VIEW.ONLY
          END CASE

          RETURN
*-------------------------------------------------------------------------*
CHG.COL.VIEW: *** Change Column View

          VIEW.OPTS = 'Standard':VM:'Extended Cost'
          MENU.TABLE ,,,1,2,24,,,VIEW.OPTS,'View Choices',VIEW<1,1>
          IF QUIT               THEN RETURN
          IF OPTION = VIEW<1,1> THEN RETURN
          VIEW<1,1> = OPTION ;* save the new view option

          BEGIN CASE
          CASE VIEW<1,1> = 2
             GOSUB DSP.EXT
          CASE OTHERWISE
             WINDOW.CHILD.CLOSE
             GOSUB DSP.STD
          END CASE

          VCLR 1
          GOSUB DISP.LINES
          GOSUB LOAD.MENU

          RETURN
*-------------------------------------------------------------------------*
DSP.STD:  *** Setup Standard Display

          DLGTH     = 35         ;* Display length of description
          DFMT      = 'L#':DLGTH ;* Decription format
          UNT.DPOS  = 50         ;* Unit cost display position
          LTYP.DPOS = 63         ;* Location type display position
          LOCA.DPOS = 66         ;* Location display position

          FOR LN = 5 TO 19
             PRINT @(39,LN):' '
             PRINT @(52,LN):' '
             PRINT @(54,LN):' '
             PRINT @(67,LN):' '
          NEXT LN

          RETURN
*-------------------------------------------------------------------------*
DSP.EXT:  *** Setup Extended Display

          DLGTH     = 25         ;* Display length of description
          DFMT      = 'L#':DLGTH ;* Decription format
          UNT.DPOS  = 40         ;* Unit cost display position
          LTYP.DPOS = 52         ;* Location type display position
          LOCA.DPOS = 54         ;* Location display position

          WINDOW.CHILD 1,4,78,17,9
          LN  = 'Qty/UnitProduct Description':VIEW<1,2>
          LN := ' CostTLocationExt Cost'
          PRINT @(1,4):LN
          LN  = ''
          LN := ''
          PRINT @(1,20):LN

          FOR LN = 5 TO 19
             PRINT @(13,LN):''
             PRINT @(39,LN):''
             PRINT @(52,LN):''
             PRINT @(54,LN):''
             PRINT @(67,LN):''
          NEXT LN

          RETURN
*-------------------------------------------------------------------------*
CHG.COST.VIEW: *** Change the cost view to either Cost Of Goods Sold (COGS)
          *** or Commission Cost (COMM).

          IF VIEW<1,2> = 'COGS' THEN
             VIEW<1,2> = 'COMM'
          END ELSE
             VIEW<1,2> = 'COGS'
          END

          GOSUB DISP.LINES

          * Do not allow the user to edit the cost in COMM view.
          IF COL = 3 THEN
             COL = 4; LASTKEY = 0; MOVE = 0
             RETURN TO MOVENEXT
          END

          RETURN
*-------------------------------------------------------------------------*
UPD.LOG:  *** Update log comments

          IF NOT(REQ.LOG) THEN
             RETURN ;* Log is not required
          END

          IF NOT(NEW.ORDER) AND LOG.MV = '' AND OLOG.MV = '' THEN
             RETURN ;* Nothing has changed, no need to update log
          END

          WINDOW 10,5,60,3,,,'Reason for Change'
          COMM.MSG = ''
INCM:     INPWP COMM.MSG,0,0,60,3,3
          IF COMM.MSG = '' THEN GOTO INCM
          WINDOW.CLOSE
          OE.ADD.COMMENT OID,'ALL',COMM.MSG

          * Display on Adjustment
          IF REQ.LOG = 'D' THEN
             MAT LD = ''
             PN     = 'C'
             LD(1)  = PN
             LD(2)  = 1  ;* general comment type
             LD(3)  = COMM.MSG
             LINE   = DCOUNT(LDID.LIST,VM)+1
             OE.NEW.LDID OID,LDID,LDID.LIST,LINE
             LDID.LIST<1,LINE> = LDID
             GOSUB UPD.LINE
          END

          RETURN
*-------------------------------------------------------------------------*
LOAD.MENU: *** Load menu hoy keys.

          MENU.CLEAR
          MENU.LOAD ,,,,INSERT.KEY     ;* Insert
          MENU.LOAD ,,,,DELETE.KEY     ;* Delete
          MENU.LOAD  1,21, 3,1,'C'     ;* Comments
          MENU.LOAD  5,21, 3,1,'F'     ;* Future Ledger
          MENU.LOAD  9,21,11,1,'H'     ;* History Ledger
          MENU.LOAD 21,21, 9,1,'P'     ;* Prod Maint
          MENU.LOAD 31,21, 6,1,'T'     ;* Totals
          IF VIEW.ONLY THEN
             MENU.LOAD
          END ELSE
             MENU.LOAD 38,21, 6,3,'N'  ;* Cancel
          END
          MENU.LOAD 45,21, 7,5,'L'     ;* Change Log
          MENU.LOAD 53,21, 8,1,'G'     ;* G/L
          MENU.LOAD ,,,,'`'
          MENU.LOAD 57,21, 7,2,'I'     ;* Find PN
          MENU.LOAD 65,21, 4,1,'S'     ;* Serial #
          MENU.LOAD 70,21, 4,1,'V'     ;* View

          IF COGS.VIEW.OK THEN
             MENU.LOAD 75,21, 4,2,'O'  ;* Cost
          END ELSE
             MENU.LOAD
          END

          RETURN
*-------------------------------------------------------------------------*
FINISH:   WINDOW.CLOSE
          RETURN
!EJO~04/28/09~10:40
